public class Main {

    void checkedException() throws ClassNotFoundException {
        try {
            //由于Class.forName()方法抛出一个编译期异常(checked exception)
            //故这里必须用try catch捕获或者在func1()方法继续往上抛出异常
            Class.forName("com.xxx");
        } catch (ClassNotFoundException e) {
            //e.printStackTrace();
            System.out.println("发生了一些异常，记录一下日志");
            //还可以继续往上抛异常
            throw e;
        }
    }

    void runtimeException() {
        int a[]={1};
        //下面这样代码将抛出运行时异常(unchecked exception)，但并不强制要求捕获或者向上抛出这个异常
        //程序依然可以通过编译，只是运行时会触发异常
        //当然也可以向上抛出异常
        try {
            int b = a[2];
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("又发生了一些异常，记录一下日志");
            throw e;
        }
    }

    public static void main(String[] args) {
        Main app = new Main();
        try {
            app.checkedException();
            //若checkedException()抛出了异常，则下面runtimeException()就不会执行
            app.runtimeException();
        } catch (Exception e) {
            System.out.println("捕获到一个"+e.getClass()+"异常");
        }
        System.out.println("前面处理了异常，但还可以继续执行到这里");
    }
}
